# 三、字符串
# 3.1 再识字符串
"""
字符串是字符的容器，一个字符串可以放任意数量的字符
"""

# 3.2 字符串的下标
"""
从前向后：下标从0开始
从后向前：下标从-1开始
"""
my_str = "hello python"
print(f"字符串{my_str}的第一个元素是:{my_str[0]}, 最后一个元素是:{my_str[-1]}")

# 3.3 字符串的常用操作
"""
方法1: 查找指定字符串/字符的下标索引值
语法: 对象.index(字符串)
"""
my_str = "hello c++"
print(f"c++在字符串{my_str}的下标是:{my_str.index('c++')}")

"""
方法2: 字符串的替换
语法: 对象.replace(字符1, 字符串2)
功能: 将字符串内的全部: 字符串1 替换为 字符串2
注意: 不是修改字符串本身, 而是得到新的字符串对象
"""
my_str = "hello Java"
my_str2 = my_str.replace("Java", "python")
print(f"{my_str2}")

"""
方法3: 字符串分割
语法: 对象.split(分割符字符串)
功能: 按照指定的分割符字符串, 将字符串划分为多个字符串, 并存入列表对象中
注意: 原字符串对象本身不变，而是得到了一个列表对象(很重要)
"""
my_str = "hello world"
new_list = my_str.split(' ')
print(f"原字符串为:{my_str}, 以空格分隔得到: {new_list}, 其类型为:{type(new_list)}")

"""
方法4: 字符串的规整操作
语法: 对象.strip(字符串) 不传参数默认就是空格 
功能: 只能去掉前后字符(满足任意一个字符就去掉)
注意: 原字符串对象本身不变，而是得到了一个新的字符串对象
"""
my_str = "     hello wrold"
new_str = my_str.strip()
print(new_str) # 丢掉首尾空格

my_str = "12hello wrold21"
new_str = my_str.strip("12")
print(new_str)

"""
方法5: 统计字符串中某字符/字符串出现的字符
语法: 对象.count(字符/字符串) 
"""
my_str = "hello world"
count_l = my_str.count('l') # 统计l出现的次数
print(f"字符串{my_str}中, 字符l出现的次数{count_l}")

"""
方法6: 统计字符串的长度
语法: len(对象) 
"""
my_str = "hello world"
length = len(my_str)
print(f"字符串{my_str}的长度为: {length}")

# 3.4 字符串的遍历
my_str = "hello world"
# for循环
print("for循环遍历:",end="")
for char in my_str:
    print(char, end="")
print()

print("while循环遍历:",end="")
i = 0
while i < len(my_str):
    print(my_str[i], end="")
    i += 1
print()

# 3.5 字符串的特性
"""
1. 只能存储字符
2. 长度任意(取决内存大小)
3. 支持下标索引
4， 允许出现重复字符
5. 和元组一样，字符串是一个无法修改的数据容器
6. 支持循环
"""

# 3.6 练习案例
"""
给定一个字符串: "itheima itcast boxuegu"
1. 统计字符串有多少个it字符
2. 将字符串内的空格，全部替换为字符'|'
3. 按照字符'|'分割字符串，得到列表
"""
my_str = "itheima itcast boxuegu"
print(f"字符串为:{my_str}, 其中it字符有:{my_str.count('it')}个") # 1

new_str = my_str.replace(' ', '|')
print(f"字符串为:{my_str}, 将字符串内的空格，全部替换为字符'|'为:{new_str}") # 2

new_list = new_str.split('|')
print(f"按照字符'|'分割字符串，得到列表: {new_list}")